import {defineStore} from 'pinia'
import { computed, ref } from 'vue'
import axios from 'axios'
import myAxios from '@/request.ts'
import { message } from 'ant-design-vue'

import { getLoginUserUsingGet, userLogoutUsingPost } from '@/api/userController.ts'

export const useLoginUserStore =  defineStore('loginUser',()=>{
  const loginUser = ref<API.LoginUserVO>({
    userAccount: '未登录',
  })

  // const setLoginUser = computed((user:any)=>{
  //   loginUser.username = user.username
  // })

  function setLoginUser(newLoginUser:API.LoginUserVO) {
    // loginUser.value(newLoginUser) loginUser.value 是一个属性，而不是函数，所以你不能通过 loginUser.value(newLoginUser) 的方式设置值。
    loginUser.value = newLoginUser  //因为loginUser是一个ref，而ref是一个对象【ref() 接收参数，并将其包裹在一个带有 .value 属性的 ref 对象中返回】
  }

  async function fetchLogin (){
    // 测试:获取当前登录用户
    // loginUser.value = { userAccount: '测试用户', id: 1,userRole: 'admin' }

    // 原生axios
    // myAxios.get('/get/login').then((res) => {
    //   if (res.data.code === 0 && res.data.data){} {
    //     // setLoginUser({ userAccount: res.data.data.userAccount, id: res.data.data.id })
    //   loginUser.value = res.data.data
    //   }
    // }).catch((err) => {
    //   console.log(err)
    // })

    // openAI生成的API请求接口
    const res = await getLoginUserUsingGet()
    if (res.data.code === 0 && res.data.data){} {
        loginUser.value = res.data.data as API.LoginUserVO
    }
  }

  async function fetchOutLogin(){
    //测试
    // setTimeout(() => {
    //   setLoginUser({ userAccount: '未登录' })
    // }, 3000)

    //原生axios
    // myAxios.post('/logout').then(res=>{
    //   if(res.data.code === 200){
    //     setLoginUser({userAccount:'未登录'})
    //   }else{
    //     message.error(res.data.message)
    //   }
    // }).catch(err=>{
    //   console.log(err)
    // })

    // openAI生成的API请求接口
    const res = await userLogoutUsingPost()
    if (res.data.code === 0 && res.data.data){} {
      loginUser.value = {userAccount:'未登录'}
    }
  }

  return {loginUser,setLoginUser,fetchLogin,fetchOutLogin}
})
